package 方法句柄;

/*
public MethodHandle findStatic​(类<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
参数
refc - 从中访问方法的类
name - 方法的名称
type - 方法的类型

结果：所需的方法句柄
异常：
NoSuchMethodException - 如果该方法不存在
IllegalAccessException - 如果访问检查失败，或者方法不是 static ，或者方法的变量arity修饰符位已设置且 asVarargsCollector失败
SecurityException - 如果存在安全管理器且 refuses access
NullPointerException - 如果任何参数为null

生成静态方法的方法句柄。 方法句柄的类型将是方法的类型。 （由于静态方法不接收接收器，因此没有额外的接收器参数插入到方法句柄类型中，
就像findVirtual或findSpecial一样 。）查找对象必须可以访问该方法及其所有参数类型。
当且仅当设置了方法的变量arity修饰符位（ 0x0080 ）时，返回的方法句柄才会有variable arity 。

如果调用返回的方法句柄，则初始化方法的类（如果尚未初始化）。

例：*/

import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
import static org.junit.Assert.assertEquals;

import java.lang.invoke.MethodHandle;
import java.util.Arrays;
import java.util.List;
public class findStatic用法 {
	public static void main(String[] args) throws Throwable {
		//访问：static Arrays.asList
		MethodHandle MH_asList = publicLookup().findStatic(Arrays.class,"asList", methodType(List.class, Object[].class));
		System.out.println(MH_asList.invoke("x", "y").toString());//[x, y]
		//assertEquals("[x, y]", MH_asList.invoke("x", "y").toString());
	}
}

 

